/*
 * jxUtils Project (2014)
 * 
 * by Denilson Edinaldo Pinto
 * 
 * LGPL
 * Copyright (C) 2014
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package org.jxUtils.check;

import java.util.List;

import org.jxUtils.exception.InvalidValueException;
import org.jxUtils.i18n.I18N;

/**
 * @author Denilson Edinaldo Pinto
 * @porject jxUtils
 * @package org.jxUtils.check
 * @date 08/02/2014 - 08:45:54
 */
public final class ParameterCheck {
	
	/**
	 * @param value
	 *        é o valor a ser validado
	 * @param valueName
	 *        é o nome do parâmetro <b>value</b>
	 * @throws InvalidValueException
	 */
	public static void isAbsoluteEmpty(final String value, final String valueName) throws InvalidValueException {
	
		//
		if(CheckUtil.isAbsoluteEmpty(value)) {
			
			throw new InvalidValueException(I18N.parameter().parameterIsAbsoluteEmpty(valueName));
		}
	}
	
	/**
	 * @param value
	 *        é o valor a ser validado
	 * @param valueName
	 *        é o nome do parâmetro <b>value</b>
	 * @throws InvalidValueException
	 */
	public static void isEmpty(final Object value, final String valueName) throws InvalidValueException {
	
		//
		if(CheckUtil.isEmpty(value)) {
			
			throw new InvalidValueException(I18N.parameter().parameterIsEmpty(valueName));
		}
	}
	
	/**
	 * @param value
	 *        é o valor a ser validado
	 * @param valueName
	 *        é o nome do parâmetro <b>value</b>
	 * @throws NullPointerException
	 */
	public static void isNull(final Object value, final String valueName) throws NullPointerException {
	
		//
		if(CheckUtil.isNull(value)) {
			
			throw new NullPointerException(I18N.parameter().parameterIsNull(valueName));
		}
	}
	
	/**
	 * @param values
	 *        é o valor a ser validado
	 * @param valuesName
	 *        é o nome do parâmetro <b>values</b>
	 * @throws NullPointerException
	 * @throws InvalidValueException
	 */
	public static void isNullOrAbsoluteEmpty(final List<String> values, final String valuesName) throws NullPointerException, InvalidValueException {
	
		isNull(values, valuesName);
		isEmpty(values, valuesName);
		
		//
		for(final String value : values) {
			
			isAbsoluteEmpty(value, valuesName);
		}
	}
	
	/**
	 * @param value
	 *        é o valor a ser validado
	 * @param valueName
	 *        é o nome do parâmetro <b>value</b>
	 * @throws NullPointerException
	 * @throws InvalidValueException
	 */
	public static void isNullOrAbsoluteEmpty(final String value, final String valueName) throws NullPointerException, InvalidValueException {
	
		isNull(value, valueName);
		isAbsoluteEmpty(value, valueName);
	}
	
	/**
	 * @param values
	 *        é o valor a ser validado
	 * @param valuesName
	 *        é o nome do parâmetro <b>values</b>
	 * @throws NullPointerException
	 * @throws InvalidValueException
	 */
	public static void isNullOrAbsoluteEmpty(final String[] values, final String valuesName) throws NullPointerException, InvalidValueException {
	
		isNull(values, valuesName);
		isEmpty(values, valuesName);
		
		//
		for(final String value : values) {
			
			isAbsoluteEmpty(value, valuesName);
		}
	}
	
	/**
	 * @param value
	 *        é o valor a ser validado
	 * @param valueName
	 *        é o nome do parâmetro <b>value</b>
	 * @throws NullPointerException
	 * @throws InvalidValueException
	 */
	public static void isNullOrEmpty(final Object value, final String valueName) throws NullPointerException, InvalidValueException {
	
		isNull(value, valueName);
		isEmpty(value, valueName);
	}
}
